library(tidyverse)
library(easystats)
library(lavaan)
set.seed(333)# Read STATA data
data <- haven::read_dta("Dataset/LVM54.dta") |>
mutate(sex = as.factor(sex)) # male is 0, female is 1
# Define variable labels from STATA data
var_labels <- data.frame("name" = names(data),
"label" = sapply(data, function(x) attr(x, "label")) |> as.character())data |>
mutate(sex = ifelse(sex == 0, "M", "F")) |>
report::report_participants()> [1] "300 participants (50.0% females)"
# "300 participants (50.0% females)"
# Describe categorical variable
data |>
select(sex) |>
ggplot(aes(x = sex)) +
geom_bar(fill = "#2196F3") +
ggtitle("Distribution of Gender") +
ylab("") +
scale_x_discrete(labels = c("Males", "Females")) +
see::theme_modern()# Check for MVN assumption and skewness for all variables
data |>
select(-sex) |>
MVN::mvn(mvnTest = "dh",
univariateTest = "SW",
univariatePlot = "histogram") # method is Doornik-Hansen> $multivariateNormality
> Test E df p value MVN
> 1 Doornik-Hansen 922 22 9.4e-181 NO
>
> $univariateNormality
> Test Variable Statistic p value Normality
> 1 Shapiro-Wilk perf1 1.00 0.5445 YES
> 2 Shapiro-Wilk perf2 1.00 0.7096 YES
> 3 Shapiro-Wilk perf3 1.00 0.8266 YES
> 4 Shapiro-Wilk perf4 0.99 0.1393 YES
> 5 Shapiro-Wilk perf5 1.00 0.5048 YES
> 6 Shapiro-Wilk emreg1 1.00 0.4532 YES
> 7 Shapiro-Wilk emreg2 1.00 0.8704 YES
> 8 Shapiro-Wilk emreg3 1.00 0.9438 YES
> 9 Shapiro-Wilk emreg4 1.00 0.629 YES
> 10 Shapiro-Wilk emreg5 1.00 0.876 YES
> 11 Shapiro-Wilk edscore 0.96 <0.001 NO
>
> $Descriptives
> n Mean Std.Dev Median Min Max 25th 75th Skew Kurtosis
> perf1 300 40 4.0 40 30.4 51 37 43 0.10569 -0.243
> perf2 300 40 4.0 40 27.0 50 38 43 -0.08425 -0.022
> perf3 300 40 4.1 40 28.1 55 37 43 0.01226 0.184
> perf4 300 40 3.9 40 27.9 51 38 43 -0.30825 0.189
> perf5 300 40 4.2 40 30.3 53 37 43 0.14315 -0.341
> emreg1 300 40 4.0 40 26.7 50 37 43 -0.00084 0.042
> emreg2 300 40 3.8 40 28.4 50 37 43 0.02994 -0.283
> emreg3 300 40 3.9 40 30.0 52 37 43 0.08401 -0.296
> emreg4 300 40 3.9 40 28.5 50 37 43 -0.00892 -0.073
> emreg5 300 40 3.9 40 28.4 51 37 43 -0.07424 -0.093
> edscore 300 30 12.7 31 -1.7 53 20 40 -0.35324 -0.827
# Check for MVN assumption and skewness for all variables but ED
data |>
select(-sex, -edscore) |>
MVN::mvn(mvnTest = "dh",
univariateTest = "SW")> $multivariateNormality
> Test E df p value MVN
> 1 Doornik-Hansen 18 20 0.57 YES
>
> $univariateNormality
> Test Variable Statistic p value Normality
> 1 Shapiro-Wilk perf1 1.00 0.54 YES
> 2 Shapiro-Wilk perf2 1.00 0.71 YES
> 3 Shapiro-Wilk perf3 1.00 0.83 YES
> 4 Shapiro-Wilk perf4 0.99 0.14 YES
> 5 Shapiro-Wilk perf5 1.00 0.50 YES
> 6 Shapiro-Wilk emreg1 1.00 0.45 YES
> 7 Shapiro-Wilk emreg2 1.00 0.87 YES
> 8 Shapiro-Wilk emreg3 1.00 0.94 YES
> 9 Shapiro-Wilk emreg4 1.00 0.63 YES
> 10 Shapiro-Wilk emreg5 1.00 0.88 YES
>
> $Descriptives
> n Mean Std.Dev Median Min Max 25th 75th Skew Kurtosis
> perf1 300 40 4.0 40 30 51 37 43 0.10569 -0.243
> perf2 300 40 4.0 40 27 50 38 43 -0.08425 -0.022
> perf3 300 40 4.1 40 28 55 37 43 0.01226 0.184
> perf4 300 40 3.9 40 28 51 38 43 -0.30825 0.189
> perf5 300 40 4.2 40 30 53 37 43 0.14315 -0.341
> emreg1 300 40 4.0 40 27 50 37 43 -0.00084 0.042
> emreg2 300 40 3.8 40 28 50 37 43 0.02994 -0.283
> emreg3 300 40 3.9 40 30 52 37 43 0.08401 -0.296
> emreg4 300 40 3.9 40 28 50 37 43 -0.00892 -0.073
> emreg5 300 40 3.9 40 28 51 37 43 -0.07424 -0.093
# covariance structure between perf items
cor_perf <- data |>
select(starts_with("perf")) |>
correlation::correlation()
cor_perf| Parameter1 | Parameter2 | r | CI | CI_low | CI_high | t | df_error | p | Method | n_Obs |
|---|---|---|---|---|---|---|---|---|---|---|
| perf1 | perf2 | 0.66 | 0.95 | 0.59 | 0.72 | 15 | 298 | 0 | Pearson correlation | 300 |
| perf1 | perf3 | 0.68 | 0.95 | 0.62 | 0.74 | 16 | 298 | 0 | Pearson correlation | 300 |
| perf1 | perf4 | 0.66 | 0.95 | 0.59 | 0.72 | 15 | 298 | 0 | Pearson correlation | 300 |
| perf1 | perf5 | 0.66 | 0.95 | 0.59 | 0.72 | 15 | 298 | 0 | Pearson correlation | 300 |
| perf2 | perf3 | 0.71 | 0.95 | 0.65 | 0.76 | 18 | 298 | 0 | Pearson correlation | 300 |
| perf2 | perf4 | 0.66 | 0.95 | 0.59 | 0.72 | 15 | 298 | 0 | Pearson correlation | 300 |
| perf2 | perf5 | 0.66 | 0.95 | 0.59 | 0.72 | 15 | 298 | 0 | Pearson correlation | 300 |
| perf3 | perf4 | 0.64 | 0.95 | 0.57 | 0.71 | 14 | 298 | 0 | Pearson correlation | 300 |
| perf3 | perf5 | 0.68 | 0.95 | 0.61 | 0.74 | 16 | 298 | 0 | Pearson correlation | 300 |
| perf4 | perf5 | 0.65 | 0.95 | 0.58 | 0.71 | 15 | 298 | 0 | Pearson correlation | 300 |
# covariance structure between emreg items
cor_emreg <- data |>
select(starts_with("emreg")) |>
correlation::correlation()
cor_emreg| Parameter1 | Parameter2 | r | CI | CI_low | CI_high | t | df_error | p | Method | n_Obs |
|---|---|---|---|---|---|---|---|---|---|---|
| emreg1 | emreg2 | 0.70 | 0.95 | 0.64 | 0.76 | 17 | 298 | 0 | Pearson correlation | 300 |
| emreg1 | emreg3 | 0.68 | 0.95 | 0.61 | 0.74 | 16 | 298 | 0 | Pearson correlation | 300 |
| emreg1 | emreg4 | 0.69 | 0.95 | 0.62 | 0.74 | 16 | 298 | 0 | Pearson correlation | 300 |
| emreg1 | emreg5 | 0.69 | 0.95 | 0.63 | 0.75 | 17 | 298 | 0 | Pearson correlation | 300 |
| emreg2 | emreg3 | 0.73 | 0.95 | 0.67 | 0.78 | 18 | 298 | 0 | Pearson correlation | 300 |
| emreg2 | emreg4 | 0.68 | 0.95 | 0.62 | 0.74 | 16 | 298 | 0 | Pearson correlation | 300 |
| emreg2 | emreg5 | 0.73 | 0.95 | 0.68 | 0.78 | 19 | 298 | 0 | Pearson correlation | 300 |
| emreg3 | emreg4 | 0.68 | 0.95 | 0.62 | 0.74 | 16 | 298 | 0 | Pearson correlation | 300 |
| emreg3 | emreg5 | 0.70 | 0.95 | 0.63 | 0.75 | 17 | 298 | 0 | Pearson correlation | 300 |
| emreg4 | emreg5 | 0.73 | 0.95 | 0.67 | 0.78 | 19 | 298 | 0 | Pearson correlation | 300 |
cor_table <- rbind(cor_perf, cor_emreg)
# Save corr table
# cor_table |>
# as.data.frame() |>
# mutate_if(is.numeric, round, digits = 2) |>
# mutate("95% CI" = paste0("[", CI_low, ",", CI_high, "]")) |>
# mutate(p = "< .001***") |>
# select(Parameter1, Parameter2, r, "95% CI", p) |>
# write.csv("figures/cor_table.csv", row.names = FALSE)
# measurement model
model_measurement <- "
# Measurement model
perfectionism =~ perf1 + perf2 + perf3 + perf4 + perf5
em_regulation =~ emreg1 + emreg2 + emreg3 + emreg4 + emreg5
"
fit_measurement <- sem(model_measurement, data = data)
sem_measurement <- summary(fit_measurement, fit.measures = TRUE, standardized = TRUE)> lavaan 0.6-11 ended normally after 43 iterations
>
> Estimator ML
> Optimization method NLMINB
> Number of model parameters 21
>
> Number of observations 300
>
> Model Test User Model:
>
> Test statistic 34.784
> Degrees of freedom 34
> P-value (Chi-square) 0.430
>
> Model Test Baseline Model:
>
> Test statistic 2069.031
> Degrees of freedom 45
> P-value 0.000
>
> User Model versus Baseline Model:
>
> Comparative Fit Index (CFI) 1.000
> Tucker-Lewis Index (TLI) 0.999
>
> Loglikelihood and Information Criteria:
>
> Loglikelihood user model (H0) -7379.478
> Loglikelihood unrestricted model (H1) -7362.086
>
> Akaike (AIC) 14800.956
> Bayesian (BIC) 14878.736
> Sample-size adjusted Bayesian (BIC) 14812.136
>
> Root Mean Square Error of Approximation:
>
> RMSEA 0.009
> 90 Percent confidence interval - lower 0.000
> 90 Percent confidence interval - upper 0.043
> P-value RMSEA <= 0.05 0.984
>
> Standardized Root Mean Square Residual:
>
> SRMR 0.026
>
> Parameter Estimates:
>
> Standard errors Standard
> Information Expected
> Information saturated (h1) model Structured
>
> Latent Variables:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism =~
> perf1 1.000 3.281 0.811
> perf2 1.012 0.062 16.254 0.000 3.321 0.828
> perf3 1.054 0.064 16.520 0.000 3.459 0.838
> perf4 0.956 0.062 15.418 0.000 3.135 0.796
> perf5 1.039 0.066 15.746 0.000 3.409 0.809
> em_regulation =~
> emreg1 1.000 3.247 0.820
> emreg2 1.013 0.057 17.638 0.000 3.288 0.857
> emreg3 0.982 0.059 16.758 0.000 3.188 0.827
> emreg4 1.003 0.060 16.788 0.000 3.255 0.828
> emreg5 1.017 0.057 17.692 0.000 3.301 0.858
>
> Covariances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism ~~
> em_regulation -4.425 0.760 -5.826 0.000 -0.415 -0.415
>
> Variances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 5.581 0.564 9.892 0.000 5.581 0.341
> .perf2 5.060 0.528 9.579 0.000 5.060 0.314
> .perf3 5.072 0.542 9.357 0.000 5.072 0.298
> .perf4 5.680 0.560 10.139 0.000 5.680 0.366
> .perf5 6.151 0.619 9.941 0.000 6.151 0.346
> .emreg1 5.124 0.506 10.123 0.000 5.124 0.327
> .emreg2 3.926 0.418 9.389 0.000 3.926 0.266
> .emreg3 4.699 0.469 10.012 0.000 4.699 0.316
> .emreg4 4.861 0.486 9.994 0.000 4.861 0.315
> .emreg5 3.894 0.417 9.343 0.000 3.894 0.263
> perfectionism 10.762 1.298 8.294 0.000 1.000 1.000
> em_regulation 10.541 1.242 8.489 0.000 1.000 1.000
as.data.frame(t(as.data.frame(sem_measurement$FIT))) |>
select(chisq, df, pvalue, cfi, rmsea, rmsea.pvalue, srmr, aic, bic)| chisq | df | pvalue | cfi | rmsea | rmsea.pvalue | srmr | aic | bic | |
|---|---|---|---|---|---|---|---|---|---|
| sem_measurement$FIT | 35 | 34 | 0.43 | 1 | 0.01 | 0.98 | 0.03 | 14801 | 14879 |
# SEM model
model <- "
# Measurement model
perfectionism =~ perf1 + perf2 + perf3 + perf4 + perf5
em_regulation =~ emreg1 + emreg2 + emreg3 + emreg4 + emreg5
# Structural model
## Regressions
perfectionism ~ edscore
em_regulation ~ edscore
"
fit_model <- sem(model, data = data, se = "robust")
summary(fit_model, fit.measures = TRUE, standardized = TRUE)> lavaan 0.6-11 ended normally after 51 iterations
>
> Estimator ML
> Optimization method NLMINB
> Number of model parameters 23
>
> Number of observations 300
>
> Model Test User Model:
>
> Test statistic 43.689
> Degrees of freedom 42
> P-value (Chi-square) 0.400
>
> Model Test Baseline Model:
>
> Test statistic 2106.165
> Degrees of freedom 55
> P-value 0.000
>
> User Model versus Baseline Model:
>
> Comparative Fit Index (CFI) 0.999
> Tucker-Lewis Index (TLI) 0.999
>
> Loglikelihood and Information Criteria:
>
> Loglikelihood user model (H0) -7365.364
> Loglikelihood unrestricted model (H1) -7343.520
>
> Akaike (AIC) 14776.729
> Bayesian (BIC) 14861.916
> Sample-size adjusted Bayesian (BIC) 14788.973
>
> Root Mean Square Error of Approximation:
>
> RMSEA 0.012
> 90 Percent confidence interval - lower 0.000
> 90 Percent confidence interval - upper 0.041
> P-value RMSEA <= 0.05 0.990
>
> Standardized Root Mean Square Residual:
>
> SRMR 0.026
>
> Parameter Estimates:
>
> Standard errors Robust.sem
> Information Expected
> Information saturated (h1) model Structured
>
> Latent Variables:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism =~
> perf1 1.000 3.270 0.809
> perf2 1.018 0.062 16.353 0.000 3.327 0.829
> perf3 1.058 0.068 15.526 0.000 3.459 0.838
> perf4 0.958 0.061 15.661 0.000 3.131 0.795
> perf5 1.045 0.059 17.717 0.000 3.417 0.811
> em_regulation =~
> emreg1 1.000 3.247 0.820
> emreg2 1.012 0.054 18.616 0.000 3.288 0.856
> emreg3 0.982 0.057 17.269 0.000 3.189 0.827
> emreg4 1.002 0.062 16.215 0.000 3.254 0.828
> emreg5 1.016 0.058 17.671 0.000 3.300 0.858
>
> Regressions:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism ~
> edscore 0.079 0.016 5.068 0.000 0.024 0.307
> em_regulation ~
> edscore -0.046 0.017 -2.683 0.007 -0.014 -0.178
>
> Covariances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perfectionism ~~
> .em_regulation -3.833 0.705 -5.437 0.000 -0.385 -0.385
>
> Variances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 5.652 0.578 9.772 0.000 5.652 0.346
> .perf2 5.019 0.492 10.196 0.000 5.019 0.312
> .perf3 5.073 0.537 9.443 0.000 5.073 0.298
> .perf4 5.705 0.577 9.892 0.000 5.705 0.368
> .perf5 6.095 0.656 9.295 0.000 6.095 0.343
> .emreg1 5.121 0.565 9.066 0.000 5.121 0.327
> .emreg2 3.927 0.385 10.190 0.000 3.927 0.267
> .emreg3 4.689 0.498 9.412 0.000 4.689 0.316
> .emreg4 4.868 0.554 8.791 0.000 4.868 0.315
> .emreg5 3.898 0.446 8.746 0.000 3.898 0.264
> .perfectionism 9.682 1.176 8.230 0.000 0.906 0.906
> .em_regulation 10.211 1.204 8.480 0.000 0.968 0.968
#
# semTable::semTable(fit_model, type = "html", file = "figures/sem2")fit_model_group1 <- sem(model, data = data, se = "robust", group = "sex")
summary(fit_model_group1, fit.measures = TRUE, standardized = TRUE)> lavaan 0.6-11 ended normally after 178 iterations
>
> Estimator ML
> Optimization method NLMINB
> Number of model parameters 66
>
> Number of observations per group:
> 0 150
> 1 150
>
> Model Test User Model:
>
> Test statistic 74.075
> Degrees of freedom 84
> P-value (Chi-square) 0.772
> Test statistic for each group:
> 0 40.021
> 1 34.054
>
> Model Test Baseline Model:
>
> Test statistic 2330.188
> Degrees of freedom 110
> P-value 0.000
>
> User Model versus Baseline Model:
>
> Comparative Fit Index (CFI) 1.000
> Tucker-Lewis Index (TLI) 1.006
>
> Loglikelihood and Information Criteria:
>
> Loglikelihood user model (H0) -7253.516
> Loglikelihood unrestricted model (H1) -7216.479
>
> Akaike (AIC) 14639.033
> Bayesian (BIC) 14883.482
> Sample-size adjusted Bayesian (BIC) 14674.169
>
> Root Mean Square Error of Approximation:
>
> RMSEA 0.000
> 90 Percent confidence interval - lower 0.000
> 90 Percent confidence interval - upper 0.032
> P-value RMSEA <= 0.05 0.997
>
> Standardized Root Mean Square Residual:
>
> SRMR 0.028
>
> Parameter Estimates:
>
> Standard errors Robust.sem
> Information Expected
> Information saturated (h1) model Structured
>
>
> Group 1 [0]:
>
> Latent Variables:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism =~
> perf1 1.000 3.258 0.790
> perf2 0.971 0.079 12.347 0.000 3.162 0.809
> perf3 1.090 0.102 10.698 0.000 3.553 0.854
> perf4 0.900 0.083 10.795 0.000 2.933 0.798
> perf5 1.033 0.092 11.290 0.000 3.367 0.794
> em_regulation =~
> emreg1 1.000 3.017 0.811
> emreg2 1.031 0.081 12.742 0.000 3.109 0.842
> emreg3 0.921 0.078 11.822 0.000 2.777 0.755
> emreg4 1.046 0.088 11.850 0.000 3.155 0.835
> emreg5 1.125 0.086 13.094 0.000 3.394 0.873
>
> Regressions:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism ~
> edscore -0.134 0.053 -2.553 0.011 -0.041 -0.237
> em_regulation ~
> edscore 0.299 0.039 7.667 0.000 0.099 0.571
>
> Covariances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perfectionism ~~
> .em_regulation -2.966 0.744 -3.986 0.000 -0.378 -0.378
>
> Intercepts:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 45.717 2.110 21.663 0.000 45.717 11.092
> .perf2 46.036 1.948 23.634 0.000 46.036 11.773
> .perf3 46.311 2.138 21.662 0.000 46.311 11.137
> .perf4 45.245 1.809 25.007 0.000 45.245 12.315
> .perf5 46.417 2.097 22.137 0.000 46.417 10.941
> .emreg1 28.010 1.553 18.032 0.000 28.010 7.528
> .emreg2 27.558 1.552 17.754 0.000 27.558 7.459
> .emreg3 28.894 1.484 19.475 0.000 28.894 7.851
> .emreg4 27.450 1.704 16.108 0.000 27.450 7.261
> .emreg5 26.292 1.733 15.173 0.000 26.292 6.762
> .perfectionism 0.000 0.000 0.000
> .em_regulation 0.000 0.000 0.000
>
> Variances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 6.373 0.990 6.437 0.000 6.373 0.375
> .perf2 5.290 0.736 7.192 0.000 5.290 0.346
> .perf3 4.670 0.746 6.262 0.000 4.670 0.270
> .perf4 4.894 0.610 8.022 0.000 4.894 0.363
> .perf5 6.666 1.040 6.410 0.000 6.666 0.370
> .emreg1 4.744 0.768 6.176 0.000 4.744 0.343
> .emreg2 3.981 0.569 6.993 0.000 3.981 0.292
> .emreg3 5.831 0.773 7.548 0.000 5.831 0.431
> .emreg4 4.339 0.776 5.591 0.000 4.339 0.304
> .emreg5 3.599 0.546 6.592 0.000 3.599 0.238
> .perfectionism 10.016 1.707 5.869 0.000 0.944 0.944
> .em_regulation 6.130 0.934 6.566 0.000 0.674 0.674
>
>
> Group 2 [1]:
>
> Latent Variables:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism =~
> perf1 1.000 3.277 0.829
> perf2 1.038 0.091 11.382 0.000 3.403 0.838
> perf3 1.030 0.096 10.749 0.000 3.374 0.829
> perf4 1.013 0.089 11.439 0.000 3.321 0.796
> perf5 1.029 0.073 14.136 0.000 3.373 0.824
> em_regulation =~
> emreg1 1.000 3.421 0.822
> emreg2 1.005 0.072 14.046 0.000 3.438 0.868
> emreg3 1.042 0.085 12.296 0.000 3.565 0.891
> emreg4 0.972 0.084 11.555 0.000 3.324 0.818
> emreg5 0.934 0.074 12.646 0.000 3.195 0.848
>
> Regressions:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism ~
> edscore 0.275 0.023 12.018 0.000 0.084 0.758
> em_regulation ~
> edscore -0.238 0.031 -7.719 0.000 -0.070 -0.628
>
> Covariances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perfectionism ~~
> .em_regulation 0.993 0.516 1.925 0.054 0.175 0.175
>
> Intercepts:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 34.700 0.482 71.941 0.000 34.700 8.775
> .perf2 34.432 0.602 57.204 0.000 34.432 8.477
> .perf3 34.320 0.533 64.430 0.000 34.320 8.434
> .perf4 34.547 0.657 52.596 0.000 34.547 8.281
> .perf5 34.152 0.492 69.371 0.000 34.152 8.343
> .emreg1 45.119 0.648 69.629 0.000 45.119 10.846
> .emreg2 44.950 0.644 69.782 0.000 44.950 11.344
> .emreg3 45.204 0.608 74.382 0.000 45.204 11.293
> .emreg4 44.821 0.646 69.374 0.000 44.821 11.028
> .emreg5 44.719 0.605 73.943 0.000 44.719 11.871
> .perfectionism 0.000 0.000 0.000
> .em_regulation 0.000 0.000 0.000
>
> Variances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 4.900 0.620 7.907 0.000 4.900 0.313
> .perf2 4.920 0.635 7.747 0.000 4.920 0.298
> .perf3 5.175 0.758 6.828 0.000 5.175 0.313
> .perf4 6.377 0.978 6.522 0.000 6.377 0.366
> .perf5 5.377 0.800 6.725 0.000 5.377 0.321
> .emreg1 5.601 0.826 6.777 0.000 5.601 0.324
> .emreg2 3.880 0.513 7.557 0.000 3.880 0.247
> .emreg3 3.311 0.522 6.339 0.000 3.311 0.207
> .emreg4 5.469 0.774 7.062 0.000 5.469 0.331
> .emreg5 3.982 0.630 6.323 0.000 3.982 0.281
> .perfectionism 4.565 0.713 6.398 0.000 0.425 0.425
> .em_regulation 7.090 1.179 6.014 0.000 0.606 0.606
m1 <- fitMeasures(fit_model_group1)[names = c("cfi", "tli")]
fit_model_group2 <- sem(model, data = data, se = "robust", group = "sex",
group.equal = c("loadings"))
summary(fit_model_group2, fit.measures = TRUE, standardized = TRUE)> lavaan 0.6-11 ended normally after 180 iterations
>
> Estimator ML
> Optimization method NLMINB
> Number of model parameters 66
> Number of equality constraints 8
>
> Number of observations per group:
> 0 150
> 1 150
>
> Model Test User Model:
>
> Test statistic 84.539
> Degrees of freedom 92
> P-value (Chi-square) 0.697
> Test statistic for each group:
> 0 46.101
> 1 38.438
>
> Model Test Baseline Model:
>
> Test statistic 2330.188
> Degrees of freedom 110
> P-value 0.000
>
> User Model versus Baseline Model:
>
> Comparative Fit Index (CFI) 1.000
> Tucker-Lewis Index (TLI) 1.004
>
> Loglikelihood and Information Criteria:
>
> Loglikelihood user model (H0) -7258.748
> Loglikelihood unrestricted model (H1) -7216.479
>
> Akaike (AIC) 14633.497
> Bayesian (BIC) 14848.316
> Sample-size adjusted Bayesian (BIC) 14664.375
>
> Root Mean Square Error of Approximation:
>
> RMSEA 0.000
> 90 Percent confidence interval - lower 0.000
> 90 Percent confidence interval - upper 0.035
> P-value RMSEA <= 0.05 0.995
>
> Standardized Root Mean Square Residual:
>
> SRMR 0.041
>
> Parameter Estimates:
>
> Standard errors Robust.sem
> Information Expected
> Information saturated (h1) model Structured
>
>
> Group 1 [0]:
>
> Latent Variables:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism =~
> perf1 1.000 3.218 0.786
> perf2 (.p2.) 1.008 0.061 16.421 0.000 3.245 0.818
> perf3 (.p3.) 1.061 0.070 15.196 0.000 3.415 0.840
> perf4 (.p4.) 0.953 0.061 15.530 0.000 3.067 0.814
> perf5 (.p5.) 1.032 0.057 17.969 0.000 3.321 0.789
> em_regulation =~
> emreg1 1.000 3.083 0.819
> emreg2 (.p7.) 1.016 0.054 18.902 0.000 3.133 0.845
> emreg3 (.p8.) 1.006 0.058 17.453 0.000 3.101 0.793
> emreg4 (.p9.) 1.006 0.061 16.490 0.000 3.103 0.829
> emreg5 (.10.) 1.016 0.057 17.907 0.000 3.132 0.845
>
> Regressions:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism ~
> edscore -0.134 0.051 -2.630 0.009 -0.042 -0.239
> em_regulation ~
> edscore 0.306 0.038 8.002 0.000 0.099 0.572
>
> Covariances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perfectionism ~~
> .em_regulation -2.970 0.712 -4.170 0.000 -0.376 -0.376
>
> Intercepts:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 45.687 2.038 22.418 0.000 45.687 11.158
> .perf2 46.207 1.996 23.151 0.000 46.207 11.645
> .perf3 46.122 2.078 22.195 0.000 46.122 11.347
> .perf4 45.497 1.882 24.172 0.000 45.497 12.075
> .perf5 46.377 2.041 22.725 0.000 46.377 11.013
> .emreg1 27.736 1.523 18.215 0.000 27.736 7.368
> .emreg2 27.450 1.525 18.002 0.000 27.450 7.399
> .emreg3 27.602 1.484 18.594 0.000 27.602 7.054
> .emreg4 27.643 1.593 17.356 0.000 27.643 7.383
> .emreg5 27.312 1.598 17.095 0.000 27.312 7.366
> .perfectionism 0.000 0.000 0.000
> .em_regulation 0.000 0.000 0.000
>
> Variances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 6.408 0.988 6.487 0.000 6.408 0.382
> .perf2 5.212 0.739 7.055 0.000 5.212 0.331
> .perf3 4.858 0.715 6.795 0.000 4.858 0.294
> .perf4 4.789 0.612 7.825 0.000 4.789 0.337
> .perf5 6.707 1.017 6.595 0.000 6.707 0.378
> .emreg1 4.668 0.761 6.132 0.000 4.668 0.329
> .emreg2 3.944 0.567 6.961 0.000 3.944 0.287
> .emreg3 5.693 0.784 7.262 0.000 5.693 0.372
> .emreg4 4.393 0.766 5.731 0.000 4.393 0.313
> .emreg5 3.939 0.549 7.178 0.000 3.939 0.287
> .perfectionism 9.765 1.498 6.517 0.000 0.943 0.943
> .em_regulation 6.395 0.873 7.324 0.000 0.673 0.673
>
>
> Group 2 [1]:
>
> Latent Variables:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism =~
> perf1 1.000 3.303 0.831
> perf2 (.p2.) 1.008 0.061 16.421 0.000 3.331 0.831
> perf3 (.p3.) 1.061 0.070 15.196 0.000 3.505 0.841
> perf4 (.p4.) 0.953 0.061 15.530 0.000 3.148 0.776
> perf5 (.p5.) 1.032 0.057 17.969 0.000 3.408 0.827
> em_regulation =~
> emreg1 1.000 3.361 0.817
> emreg2 (.p7.) 1.016 0.054 18.902 0.000 3.416 0.865
> emreg3 (.p8.) 1.006 0.058 17.453 0.000 3.381 0.875
> emreg4 (.p9.) 1.006 0.061 16.490 0.000 3.383 0.824
> emreg5 (.10.) 1.016 0.057 17.907 0.000 3.414 0.866
>
> Regressions:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism ~
> edscore 0.278 0.022 12.811 0.000 0.084 0.758
> em_regulation ~
> edscore -0.234 0.029 -8.168 0.000 -0.070 -0.627
>
> Covariances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perfectionism ~~
> .em_regulation 0.980 0.509 1.926 0.054 0.174 0.174
>
> Intercepts:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 34.657 0.474 73.051 0.000 34.657 8.716
> .perf2 34.548 0.550 62.810 0.000 34.548 8.619
> .perf3 34.106 0.504 67.695 0.000 34.106 8.185
> .perf4 34.827 0.572 60.864 0.000 34.827 8.587
> .perf5 34.094 0.489 69.745 0.000 34.094 8.276
> .emreg1 45.034 0.616 73.083 0.000 45.034 10.951
> .emreg2 44.916 0.622 72.194 0.000 44.916 11.377
> .emreg3 44.952 0.595 75.555 0.000 44.952 11.632
> .emreg4 44.896 0.625 71.829 0.000 44.896 10.936
> .emreg5 45.010 0.602 74.747 0.000 45.010 11.418
> .perfectionism 0.000 0.000 0.000
> .em_regulation 0.000 0.000 0.000
>
> Variances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 4.897 0.618 7.924 0.000 4.897 0.310
> .perf2 4.969 0.611 8.136 0.000 4.969 0.309
> .perf3 5.077 0.760 6.679 0.000 5.077 0.292
> .perf4 6.539 0.974 6.713 0.000 6.539 0.398
> .perf5 5.354 0.797 6.717 0.000 5.354 0.315
> .emreg1 5.615 0.808 6.948 0.000 5.615 0.332
> .emreg2 3.917 0.512 7.656 0.000 3.917 0.251
> .emreg3 3.500 0.533 6.569 0.000 3.500 0.234
> .emreg4 5.411 0.772 7.010 0.000 5.411 0.321
> .emreg5 3.881 0.648 5.992 0.000 3.881 0.250
> .perfectionism 4.636 0.663 6.993 0.000 0.425 0.425
> .em_regulation 6.850 0.986 6.949 0.000 0.606 0.606
m2 <- fitMeasures(fit_model_group2)[names = c("cfi", "tli")]
fit_model_group3 <- sem(model, data = data, se = "robust", group = "sex",
group.equal = c("loadings", "intercepts"))
summary(fit_model_group3, fit.measures = TRUE, standardized = TRUE)> lavaan 0.6-11 ended normally after 186 iterations
>
> Estimator ML
> Optimization method NLMINB
> Number of model parameters 68
> Number of equality constraints 18
>
> Number of observations per group:
> 0 150
> 1 150
>
> Model Test User Model:
>
> Test statistic 91.473
> Degrees of freedom 100
> P-value (Chi-square) 0.717
> Test statistic for each group:
> 0 49.681
> 1 41.792
>
> Model Test Baseline Model:
>
> Test statistic 2330.188
> Degrees of freedom 110
> P-value 0.000
>
> User Model versus Baseline Model:
>
> Comparative Fit Index (CFI) 1.000
> Tucker-Lewis Index (TLI) 1.004
>
> Loglikelihood and Information Criteria:
>
> Loglikelihood user model (H0) -7262.215
> Loglikelihood unrestricted model (H1) -7216.479
>
> Akaike (AIC) 14624.431
> Bayesian (BIC) 14809.620
> Sample-size adjusted Bayesian (BIC) 14651.049
>
> Root Mean Square Error of Approximation:
>
> RMSEA 0.000
> 90 Percent confidence interval - lower 0.000
> 90 Percent confidence interval - upper 0.034
> P-value RMSEA <= 0.05 0.997
>
> Standardized Root Mean Square Residual:
>
> SRMR 0.043
>
> Parameter Estimates:
>
> Standard errors Robust.sem
> Information Expected
> Information saturated (h1) model Structured
>
>
> Group 1 [0]:
>
> Latent Variables:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism =~
> perf1 1.000 3.194 0.782
> perf2 (.p2.) 1.019 0.061 16.614 0.000 3.256 0.819
> perf3 (.p3.) 1.068 0.068 15.604 0.000 3.411 0.840
> perf4 (.p4.) 0.957 0.061 15.751 0.000 3.055 0.813
> perf5 (.p5.) 1.048 0.058 18.030 0.000 3.347 0.789
> em_regulation =~
> emreg1 1.000 3.085 0.819
> emreg2 (.p7.) 1.015 0.053 19.001 0.000 3.130 0.844
> emreg3 (.p8.) 1.005 0.057 17.560 0.000 3.101 0.793
> emreg4 (.p9.) 1.004 0.061 16.414 0.000 3.097 0.828
> emreg5 (.10.) 1.018 0.057 17.751 0.000 3.139 0.845
>
> Regressions:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism ~
> edscore -0.133 0.050 -2.626 0.009 -0.042 -0.239
> em_regulation ~
> edscore 0.306 0.038 7.997 0.000 0.099 0.572
>
> Covariances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perfectionism ~~
> .em_regulation -2.950 0.707 -4.171 0.000 -0.376 -0.376
>
> Intercepts:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 (.27.) 45.856 2.014 22.771 0.000 45.856 11.225
> .perf2 (.28.) 46.144 1.998 23.090 0.000 46.144 11.605
> .perf3 (.29.) 46.156 2.075 22.240 0.000 46.156 11.364
> .perf4 (.30.) 45.559 1.875 24.294 0.000 45.559 12.119
> .perf5 (.31.) 46.137 2.065 22.346 0.000 46.137 10.876
> .emreg1 (.32.) 27.745 1.519 18.266 0.000 27.745 7.367
> .emreg2 (.33.) 27.424 1.520 18.048 0.000 27.424 7.397
> .emreg3 (.34.) 27.594 1.493 18.488 0.000 27.594 7.052
> .emreg4 (.35.) 27.611 1.588 17.382 0.000 27.611 7.381
> .emreg5 (.36.) 27.363 1.594 17.162 0.000 27.363 7.368
> .prfctns 0.000 0.000 0.000
> .em_rglt 0.000 0.000 0.000
>
> Variances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 6.488 0.987 6.574 0.000 6.488 0.389
> .perf2 5.208 0.739 7.043 0.000 5.208 0.329
> .perf3 4.860 0.714 6.811 0.000 4.860 0.295
> .perf4 4.799 0.611 7.849 0.000 4.799 0.340
> .perf5 6.789 1.020 6.653 0.000 6.789 0.377
> .emreg1 4.667 0.761 6.129 0.000 4.667 0.329
> .emreg2 3.948 0.566 6.972 0.000 3.948 0.287
> .emreg3 5.694 0.783 7.276 0.000 5.694 0.372
> .emreg4 4.400 0.767 5.739 0.000 4.400 0.314
> .emreg5 3.938 0.548 7.181 0.000 3.938 0.286
> .perfectionism 9.619 1.476 6.518 0.000 0.943 0.943
> .em_regulation 6.403 0.871 7.348 0.000 0.673 0.673
>
>
> Group 2 [1]:
>
> Latent Variables:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism =~
> perf1 1.000 3.278 0.827
> perf2 (.p2.) 1.019 0.061 16.614 0.000 3.341 0.832
> perf3 (.p3.) 1.068 0.068 15.604 0.000 3.500 0.841
> perf4 (.p4.) 0.957 0.061 15.751 0.000 3.135 0.774
> perf5 (.p5.) 1.048 0.058 18.030 0.000 3.435 0.828
> em_regulation =~
> emreg1 1.000 3.363 0.817
> emreg2 (.p7.) 1.015 0.053 19.001 0.000 3.412 0.865
> emreg3 (.p8.) 1.005 0.057 17.560 0.000 3.380 0.875
> emreg4 (.p9.) 1.004 0.061 16.414 0.000 3.376 0.823
> emreg5 (.10.) 1.018 0.057 17.751 0.000 3.422 0.866
>
> Regressions:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism ~
> edscore 0.276 0.021 12.825 0.000 0.084 0.759
> em_regulation ~
> edscore -0.234 0.029 -8.178 0.000 -0.070 -0.627
>
> Covariances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perfectionism ~~
> .em_regulation 0.973 0.505 1.925 0.054 0.174 0.174
>
> Intercepts:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 (.27.) 45.856 2.014 22.771 0.000 45.856 11.574
> .perf2 (.28.) 46.144 1.998 23.090 0.000 46.144 11.491
> .perf3 (.29.) 46.156 2.075 22.240 0.000 46.156 11.090
> .perf4 (.30.) 45.559 1.875 24.294 0.000 45.559 11.250
> .perf5 (.31.) 46.137 2.065 22.346 0.000 46.137 11.121
> .emreg1 (.32.) 27.745 1.519 18.266 0.000 27.745 6.745
> .emreg2 (.33.) 27.424 1.520 18.048 0.000 27.424 6.952
> .emreg3 (.34.) 27.594 1.493 18.488 0.000 27.594 7.142
> .emreg4 (.35.) 27.611 1.588 17.382 0.000 27.611 6.733
> .emreg5 (.36.) 27.363 1.594 17.162 0.000 27.363 6.927
> .prfctns -11.321 2.099 -5.394 0.000 -3.454 -3.454
> .em_rglt 17.273 1.673 10.323 0.000 5.137 5.137
>
> Variances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 4.954 0.613 8.075 0.000 4.954 0.316
> .perf2 4.961 0.609 8.140 0.000 4.961 0.308
> .perf3 5.070 0.760 6.675 0.000 5.070 0.293
> .perf4 6.571 0.974 6.744 0.000 6.571 0.401
> .perf5 5.411 0.800 6.764 0.000 5.411 0.314
> .emreg1 5.614 0.807 6.953 0.000 5.614 0.332
> .emreg2 3.921 0.511 7.667 0.000 3.921 0.252
> .emreg3 3.501 0.534 6.556 0.000 3.501 0.235
> .emreg4 5.418 0.772 7.016 0.000 5.418 0.322
> .emreg5 3.890 0.650 5.988 0.000 3.890 0.249
> .perfectionism 4.558 0.649 7.023 0.000 0.424 0.424
> .em_regulation 6.857 0.983 6.976 0.000 0.606 0.606
m3 <- fitMeasures(fit_model_group3)[names = c("cfi", "tli")]
lavTestLRT(fit_model_group1, fit_model_group2, fit_model_group3)| Df | AIC | BIC | Chisq | Chisq diff | Df diff | Pr(>Chisq) | |
|---|---|---|---|---|---|---|---|
| fit_model_group1 | 84 | 14639 | 14883 | 74 | |||
| fit_model_group2 | 92 | 14634 | 14848 | 85 | 10.5 | 8 | 0.23 |
| fit_model_group3 | 100 | 14624 | 14810 | 91 | 6.9 | 8 | 0.54 |
# Not sig diff => metric measurement invariance can be assumed
# Not sig diff => metric scalar invariance can be assumed
round(m1 - m2, 3)> cfi tli
> 0.000 0.002
# cfi tli
#0.000 0.002
round(m2 - m3, 3)> cfi tli
> 0 0
# cfi tli
# 0 0 # constrained for perf
model_perf_const <- "
# Measurement model
perfectionism =~ perf1 + perf2 + perf3 + perf4 + perf5
em_regulation =~ emreg1 + emreg2 + emreg3 + emreg4 + emreg5
# Structural model
## Regressions
perfectionism ~ c(b1, b1)*edscore
em_regulation ~ edscore
"
fit_perf_cons <- sem(model_perf_const, data = data, se = "robust", group = "sex",
group.equal = c("loadings", "intercepts"))
summary(fit_perf_cons, fit.measures = TRUE, standardized = TRUE)> lavaan 0.6-11 ended normally after 164 iterations
>
> Estimator ML
> Optimization method NLMINB
> Number of model parameters 68
> Number of equality constraints 19
>
> Number of observations per group:
> 0 150
> 1 150
>
> Model Test User Model:
>
> Test statistic 146.899
> Degrees of freedom 101
> P-value (Chi-square) 0.002
> Test statistic for each group:
> 0 98.037
> 1 48.861
>
> Model Test Baseline Model:
>
> Test statistic 2330.188
> Degrees of freedom 110
> P-value 0.000
>
> User Model versus Baseline Model:
>
> Comparative Fit Index (CFI) 0.979
> Tucker-Lewis Index (TLI) 0.977
>
> Loglikelihood and Information Criteria:
>
> Loglikelihood user model (H0) -7289.928
> Loglikelihood unrestricted model (H1) -7216.479
>
> Akaike (AIC) 14677.857
> Bayesian (BIC) 14859.342
> Sample-size adjusted Bayesian (BIC) 14703.943
>
> Root Mean Square Error of Approximation:
>
> RMSEA 0.055
> 90 Percent confidence interval - lower 0.034
> 90 Percent confidence interval - upper 0.074
> P-value RMSEA <= 0.05 0.322
>
> Standardized Root Mean Square Residual:
>
> SRMR 0.151
>
> Parameter Estimates:
>
> Standard errors Robust.sem
> Information Expected
> Information saturated (h1) model Structured
>
>
> Group 1 [0]:
>
> Latent Variables:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism =~
> perf1 1.000 3.928 0.839
> perf2 (.p2.) 1.016 0.054 18.895 0.000 3.991 0.869
> perf3 (.p3.) 1.067 0.060 17.902 0.000 4.191 0.888
> perf4 (.p4.) 0.945 0.052 18.316 0.000 3.713 0.858
> perf5 (.p5.) 1.045 0.051 20.388 0.000 4.103 0.843
> em_regulation =~
> emreg1 1.000 2.858 0.798
> emreg2 (.p7.) 1.015 0.057 17.927 0.000 2.900 0.825
> emreg3 (.p8.) 1.005 0.060 16.765 0.000 2.873 0.769
> emreg4 (.p9.) 1.004 0.065 15.423 0.000 2.870 0.807
> emreg5 (.10.) 1.018 0.061 16.756 0.000 2.909 0.826
>
> Regressions:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism ~
> edscore (b1) 0.220 0.019 11.665 0.000 0.056 0.322
> em_regulation ~
> edscore 0.210 0.036 5.827 0.000 0.073 0.422
>
> Covariances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perfectionism ~~
> .em_regulation -4.096 0.922 -4.443 0.000 -0.425 -0.425
>
> Intercepts:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 (.27.) 31.856 0.786 40.542 0.000 31.856 6.805
> .perf2 (.28.) 31.900 0.870 36.670 0.000 31.900 6.947
> .perf3 (.29.) 31.212 0.886 35.234 0.000 31.212 6.614
> .perf4 (.30.) 32.264 0.862 37.413 0.000 32.264 7.456
> .perf5 (.31.) 31.492 0.822 38.288 0.000 31.492 6.473
> .emreg1 (.32.) 31.594 1.434 22.038 0.000 31.594 8.819
> .emreg2 (.33.) 31.331 1.446 21.668 0.000 31.331 8.912
> .emreg3 (.34.) 31.464 1.429 22.025 0.000 31.464 8.424
> .emreg4 (.35.) 31.476 1.493 21.084 0.000 31.476 8.855
> .emreg5 (.36.) 31.281 1.510 20.711 0.000 31.281 8.884
> .prfctns 0.000 0.000 0.000
> .em_rglt 0.000 0.000 0.000
>
> Variances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 6.484 0.975 6.653 0.000 6.484 0.296
> .perf2 5.156 0.742 6.949 0.000 5.156 0.245
> .perf3 4.713 0.726 6.490 0.000 4.713 0.212
> .perf4 4.943 0.633 7.813 0.000 4.943 0.264
> .perf5 6.835 1.005 6.799 0.000 6.835 0.289
> .emreg1 4.666 0.762 6.127 0.000 4.666 0.364
> .emreg2 3.949 0.567 6.964 0.000 3.949 0.319
> .emreg3 5.693 0.783 7.272 0.000 5.693 0.408
> .emreg4 4.401 0.768 5.726 0.000 4.401 0.348
> .emreg5 3.939 0.549 7.179 0.000 3.939 0.318
> .perfectionism 13.830 1.997 6.924 0.000 0.896 0.896
> .em_regulation 6.714 0.937 7.168 0.000 0.822 0.822
>
>
> Group 2 [1]:
>
> Latent Variables:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism =~
> perf1 1.000 2.964 0.802
> perf2 (.p2.) 1.016 0.054 18.895 0.000 3.011 0.803
> perf3 (.p3.) 1.067 0.060 17.902 0.000 3.162 0.815
> perf4 (.p4.) 0.945 0.052 18.316 0.000 2.801 0.736
> perf5 (.p5.) 1.045 0.051 20.388 0.000 3.096 0.799
> em_regulation =~
> emreg1 1.000 3.420 0.822
> emreg2 (.p7.) 1.015 0.057 17.927 0.000 3.471 0.869
> emreg3 (.p8.) 1.005 0.060 16.765 0.000 3.438 0.878
> emreg4 (.p9.) 1.004 0.065 15.423 0.000 3.434 0.828
> emreg5 (.10.) 1.018 0.061 16.756 0.000 3.481 0.870
>
> Regressions:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism ~
> edscore (b1) 0.220 0.019 11.665 0.000 0.074 0.669
> em_regulation ~
> edscore -0.244 0.029 -8.419 0.000 -0.071 -0.643
>
> Covariances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perfectionism ~~
> .em_regulation 1.024 0.502 2.038 0.042 0.177 0.177
>
> Intercepts:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 (.27.) 31.856 0.786 40.542 0.000 31.856 8.615
> .perf2 (.28.) 31.900 0.870 36.670 0.000 31.900 8.511
> .perf3 (.29.) 31.212 0.886 35.234 0.000 31.212 8.042
> .perf4 (.30.) 32.264 0.862 37.413 0.000 32.264 8.479
> .perf5 (.31.) 31.492 0.822 38.288 0.000 31.492 8.129
> .emreg1 (.32.) 31.594 1.434 22.038 0.000 31.594 7.593
> .emreg2 (.33.) 31.331 1.446 21.668 0.000 31.331 7.841
> .emreg3 (.34.) 31.464 1.429 22.025 0.000 31.464 8.038
> .emreg4 (.35.) 31.476 1.493 21.084 0.000 31.476 7.587
> .emreg5 (.36.) 31.281 1.510 20.711 0.000 31.281 7.819
> .prfctns 3.761 0.494 7.612 0.000 1.269 1.269
> .em_rglt 13.614 1.594 8.540 0.000 3.980 3.980
>
> Variances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 4.889 0.597 8.194 0.000 4.889 0.358
> .perf2 4.980 0.609 8.184 0.000 4.980 0.354
> .perf3 5.065 0.761 6.654 0.000 5.065 0.336
> .perf4 6.633 0.979 6.777 0.000 6.633 0.458
> .perf5 5.422 0.793 6.841 0.000 5.422 0.361
> .emreg1 5.614 0.808 6.948 0.000 5.614 0.324
> .emreg2 3.921 0.512 7.661 0.000 3.921 0.246
> .emreg3 3.501 0.534 6.559 0.000 3.501 0.228
> .emreg4 5.418 0.773 7.009 0.000 5.418 0.315
> .emreg5 3.891 0.651 5.974 0.000 3.891 0.243
> .perfectionism 4.852 0.672 7.218 0.000 0.552 0.552
> .em_regulation 6.865 1.004 6.836 0.000 0.587 0.587
summary(fit_model_group3, fit.measures = TRUE, standardized = TRUE)> lavaan 0.6-11 ended normally after 186 iterations
>
> Estimator ML
> Optimization method NLMINB
> Number of model parameters 68
> Number of equality constraints 18
>
> Number of observations per group:
> 0 150
> 1 150
>
> Model Test User Model:
>
> Test statistic 91.473
> Degrees of freedom 100
> P-value (Chi-square) 0.717
> Test statistic for each group:
> 0 49.681
> 1 41.792
>
> Model Test Baseline Model:
>
> Test statistic 2330.188
> Degrees of freedom 110
> P-value 0.000
>
> User Model versus Baseline Model:
>
> Comparative Fit Index (CFI) 1.000
> Tucker-Lewis Index (TLI) 1.004
>
> Loglikelihood and Information Criteria:
>
> Loglikelihood user model (H0) -7262.215
> Loglikelihood unrestricted model (H1) -7216.479
>
> Akaike (AIC) 14624.431
> Bayesian (BIC) 14809.620
> Sample-size adjusted Bayesian (BIC) 14651.049
>
> Root Mean Square Error of Approximation:
>
> RMSEA 0.000
> 90 Percent confidence interval - lower 0.000
> 90 Percent confidence interval - upper 0.034
> P-value RMSEA <= 0.05 0.997
>
> Standardized Root Mean Square Residual:
>
> SRMR 0.043
>
> Parameter Estimates:
>
> Standard errors Robust.sem
> Information Expected
> Information saturated (h1) model Structured
>
>
> Group 1 [0]:
>
> Latent Variables:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism =~
> perf1 1.000 3.194 0.782
> perf2 (.p2.) 1.019 0.061 16.614 0.000 3.256 0.819
> perf3 (.p3.) 1.068 0.068 15.604 0.000 3.411 0.840
> perf4 (.p4.) 0.957 0.061 15.751 0.000 3.055 0.813
> perf5 (.p5.) 1.048 0.058 18.030 0.000 3.347 0.789
> em_regulation =~
> emreg1 1.000 3.085 0.819
> emreg2 (.p7.) 1.015 0.053 19.001 0.000 3.130 0.844
> emreg3 (.p8.) 1.005 0.057 17.560 0.000 3.101 0.793
> emreg4 (.p9.) 1.004 0.061 16.414 0.000 3.097 0.828
> emreg5 (.10.) 1.018 0.057 17.751 0.000 3.139 0.845
>
> Regressions:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism ~
> edscore -0.133 0.050 -2.626 0.009 -0.042 -0.239
> em_regulation ~
> edscore 0.306 0.038 7.997 0.000 0.099 0.572
>
> Covariances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perfectionism ~~
> .em_regulation -2.950 0.707 -4.171 0.000 -0.376 -0.376
>
> Intercepts:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 (.27.) 45.856 2.014 22.771 0.000 45.856 11.225
> .perf2 (.28.) 46.144 1.998 23.090 0.000 46.144 11.605
> .perf3 (.29.) 46.156 2.075 22.240 0.000 46.156 11.364
> .perf4 (.30.) 45.559 1.875 24.294 0.000 45.559 12.119
> .perf5 (.31.) 46.137 2.065 22.346 0.000 46.137 10.876
> .emreg1 (.32.) 27.745 1.519 18.266 0.000 27.745 7.367
> .emreg2 (.33.) 27.424 1.520 18.048 0.000 27.424 7.397
> .emreg3 (.34.) 27.594 1.493 18.488 0.000 27.594 7.052
> .emreg4 (.35.) 27.611 1.588 17.382 0.000 27.611 7.381
> .emreg5 (.36.) 27.363 1.594 17.162 0.000 27.363 7.368
> .prfctns 0.000 0.000 0.000
> .em_rglt 0.000 0.000 0.000
>
> Variances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 6.488 0.987 6.574 0.000 6.488 0.389
> .perf2 5.208 0.739 7.043 0.000 5.208 0.329
> .perf3 4.860 0.714 6.811 0.000 4.860 0.295
> .perf4 4.799 0.611 7.849 0.000 4.799 0.340
> .perf5 6.789 1.020 6.653 0.000 6.789 0.377
> .emreg1 4.667 0.761 6.129 0.000 4.667 0.329
> .emreg2 3.948 0.566 6.972 0.000 3.948 0.287
> .emreg3 5.694 0.783 7.276 0.000 5.694 0.372
> .emreg4 4.400 0.767 5.739 0.000 4.400 0.314
> .emreg5 3.938 0.548 7.181 0.000 3.938 0.286
> .perfectionism 9.619 1.476 6.518 0.000 0.943 0.943
> .em_regulation 6.403 0.871 7.348 0.000 0.673 0.673
>
>
> Group 2 [1]:
>
> Latent Variables:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism =~
> perf1 1.000 3.278 0.827
> perf2 (.p2.) 1.019 0.061 16.614 0.000 3.341 0.832
> perf3 (.p3.) 1.068 0.068 15.604 0.000 3.500 0.841
> perf4 (.p4.) 0.957 0.061 15.751 0.000 3.135 0.774
> perf5 (.p5.) 1.048 0.058 18.030 0.000 3.435 0.828
> em_regulation =~
> emreg1 1.000 3.363 0.817
> emreg2 (.p7.) 1.015 0.053 19.001 0.000 3.412 0.865
> emreg3 (.p8.) 1.005 0.057 17.560 0.000 3.380 0.875
> emreg4 (.p9.) 1.004 0.061 16.414 0.000 3.376 0.823
> emreg5 (.10.) 1.018 0.057 17.751 0.000 3.422 0.866
>
> Regressions:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism ~
> edscore 0.276 0.021 12.825 0.000 0.084 0.759
> em_regulation ~
> edscore -0.234 0.029 -8.178 0.000 -0.070 -0.627
>
> Covariances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perfectionism ~~
> .em_regulation 0.973 0.505 1.925 0.054 0.174 0.174
>
> Intercepts:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 (.27.) 45.856 2.014 22.771 0.000 45.856 11.574
> .perf2 (.28.) 46.144 1.998 23.090 0.000 46.144 11.491
> .perf3 (.29.) 46.156 2.075 22.240 0.000 46.156 11.090
> .perf4 (.30.) 45.559 1.875 24.294 0.000 45.559 11.250
> .perf5 (.31.) 46.137 2.065 22.346 0.000 46.137 11.121
> .emreg1 (.32.) 27.745 1.519 18.266 0.000 27.745 6.745
> .emreg2 (.33.) 27.424 1.520 18.048 0.000 27.424 6.952
> .emreg3 (.34.) 27.594 1.493 18.488 0.000 27.594 7.142
> .emreg4 (.35.) 27.611 1.588 17.382 0.000 27.611 6.733
> .emreg5 (.36.) 27.363 1.594 17.162 0.000 27.363 6.927
> .prfctns -11.321 2.099 -5.394 0.000 -3.454 -3.454
> .em_rglt 17.273 1.673 10.323 0.000 5.137 5.137
>
> Variances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 4.954 0.613 8.075 0.000 4.954 0.316
> .perf2 4.961 0.609 8.140 0.000 4.961 0.308
> .perf3 5.070 0.760 6.675 0.000 5.070 0.293
> .perf4 6.571 0.974 6.744 0.000 6.571 0.401
> .perf5 5.411 0.800 6.764 0.000 5.411 0.314
> .emreg1 5.614 0.807 6.953 0.000 5.614 0.332
> .emreg2 3.921 0.511 7.667 0.000 3.921 0.252
> .emreg3 3.501 0.534 6.556 0.000 3.501 0.235
> .emreg4 5.418 0.772 7.016 0.000 5.418 0.322
> .emreg5 3.890 0.650 5.988 0.000 3.890 0.249
> .perfectionism 4.558 0.649 7.023 0.000 0.424 0.424
> .em_regulation 6.857 0.983 6.976 0.000 0.606 0.606
anova(fit_perf_cons, fit_model_group3)| Df | AIC | BIC | Chisq | Chisq diff | Df diff | Pr(>Chisq) | |
|---|---|---|---|---|---|---|---|
| fit_model_group3 | 100 | 14624 | 14810 | 91 | |||
| fit_perf_cons | 101 | 14678 | 14859 | 147 | 55 | 1 | 0 |
# sig diff, perf variant by gender
perf_cons <- fitMeasures(fit_perf_cons)[names = c("cfi", "tli")]
round(m3 - perf_cons, 3)> cfi tli
> 0.021 0.027
# constrained for em
model_em_const <- "
# Measurement model
perfectionism =~ perf1 + perf2 + perf3 + perf4 + perf5
em_regulation =~ emreg1 + emreg2 + emreg3 + emreg4 + emreg5
# Structural model
## Regressions
perfectionism ~ edscore
em_regulation ~ c(b2, b2)*edscore
"
fit_em_cons <- sem(model_em_const, data = data, se = "robust", group = "sex",
group.equal = c("loadings", "intercepts"))
summary(fit_em_cons, fit.measures = TRUE, standardized = TRUE)> lavaan 0.6-11 ended normally after 139 iterations
>
> Estimator ML
> Optimization method NLMINB
> Number of model parameters 68
> Number of equality constraints 19
>
> Number of observations per group:
> 0 150
> 1 150
>
> Model Test User Model:
>
> Test statistic 201.197
> Degrees of freedom 101
> P-value (Chi-square) 0.000
> Test statistic for each group:
> 0 139.894
> 1 61.303
>
> Model Test Baseline Model:
>
> Test statistic 2330.188
> Degrees of freedom 110
> P-value 0.000
>
> User Model versus Baseline Model:
>
> Comparative Fit Index (CFI) 0.955
> Tucker-Lewis Index (TLI) 0.951
>
> Loglikelihood and Information Criteria:
>
> Loglikelihood user model (H0) -7317.078
> Loglikelihood unrestricted model (H1) -7216.479
>
> Akaike (AIC) 14732.155
> Bayesian (BIC) 14913.640
> Sample-size adjusted Bayesian (BIC) 14758.241
>
> Root Mean Square Error of Approximation:
>
> RMSEA 0.081
> 90 Percent confidence interval - lower 0.065
> 90 Percent confidence interval - upper 0.098
> P-value RMSEA <= 0.05 0.001
>
> Standardized Root Mean Square Residual:
>
> SRMR 0.180
>
> Parameter Estimates:
>
> Standard errors Robust.sem
> Information Expected
> Information saturated (h1) model Structured
>
>
> Group 1 [0]:
>
> Latent Variables:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism =~
> perf1 1.000 3.265 0.788
> perf2 (.p2.) 1.019 0.058 17.650 0.000 3.329 0.825
> perf3 (.p3.) 1.068 0.064 16.579 0.000 3.487 0.845
> perf4 (.p4.) 0.957 0.057 16.712 0.000 3.123 0.819
> perf5 (.p5.) 1.048 0.055 19.157 0.000 3.422 0.796
> em_regulation =~
> emreg1 1.000 3.581 0.856
> emreg2 (.p7.) 1.017 0.051 20.037 0.000 3.642 0.879
> emreg3 (.p8.) 1.009 0.055 18.189 0.000 3.612 0.834
> emreg4 (.p9.) 1.006 0.057 17.724 0.000 3.604 0.864
> emreg5 (.10.) 1.022 0.054 19.040 0.000 3.659 0.880
>
> Regressions:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism ~
> edscore 0.040 0.048 0.844 0.399 0.012 0.071
> em_regulation ~
> edscore (b2) -0.119 0.023 -5.183 0.000 -0.033 -0.191
>
> Covariances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perfectionism ~~
> .em_regulation -5.377 1.153 -4.662 0.000 -0.470 -0.470
>
> Intercepts:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 (.27.) 38.992 1.907 20.452 0.000 38.992 9.416
> .perf2 (.28.) 39.147 1.940 20.174 0.000 39.147 9.700
> .perf3 (.29.) 38.826 2.029 19.137 0.000 38.826 9.411
> .perf4 (.30.) 38.994 1.818 21.444 0.000 38.994 10.221
> .perf5 (.31.) 38.944 1.980 19.672 0.000 38.944 9.054
> .emreg1 (.32.) 44.652 0.931 47.950 0.000 44.652 10.672
> .emreg2 (.33.) 44.591 0.945 47.175 0.000 44.591 10.755
> .emreg3 (.34.) 44.605 0.914 48.811 0.000 44.605 10.299
> .emreg4 (.35.) 44.596 0.914 48.766 0.000 44.596 10.687
> .emreg5 (.36.) 44.588 0.915 48.710 0.000 44.588 10.721
> .prfctns 0.000 0.000 0.000
> .em_rglt 0.000 0.000 0.000
>
> Variances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 6.489 0.987 6.577 0.000 6.489 0.378
> .perf2 5.208 0.739 7.052 0.000 5.208 0.320
> .perf3 4.860 0.713 6.821 0.000 4.860 0.286
> .perf4 4.799 0.611 7.858 0.000 4.799 0.330
> .perf5 6.789 1.019 6.664 0.000 6.789 0.367
> .emreg1 4.684 0.790 5.930 0.000 4.684 0.268
> .emreg2 3.923 0.572 6.862 0.000 3.923 0.228
> .emreg3 5.712 0.809 7.063 0.000 5.712 0.305
> .emreg4 4.426 0.750 5.899 0.000 4.426 0.254
> .emreg5 3.907 0.588 6.645 0.000 3.907 0.226
> .perfectionism 10.607 1.600 6.629 0.000 0.995 0.995
> .em_regulation 12.354 1.528 8.086 0.000 0.963 0.963
>
>
> Group 2 [1]:
>
> Latent Variables:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism =~
> perf1 1.000 3.380 0.835
> perf2 (.p2.) 1.019 0.058 17.650 0.000 3.445 0.840
> perf3 (.p3.) 1.068 0.064 16.579 0.000 3.610 0.848
> perf4 (.p4.) 0.957 0.057 16.712 0.000 3.233 0.784
> perf5 (.p5.) 1.048 0.055 19.157 0.000 3.542 0.836
> em_regulation =~
> emreg1 1.000 3.005 0.784
> emreg2 (.p7.) 1.017 0.051 20.037 0.000 3.056 0.838
> emreg3 (.p8.) 1.009 0.055 18.189 0.000 3.031 0.850
> emreg4 (.p9.) 1.006 0.057 17.724 0.000 3.024 0.794
> emreg5 (.10.) 1.022 0.054 19.040 0.000 3.071 0.843
>
> Regressions:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> perfectionism ~
> edscore 0.290 0.021 13.603 0.000 0.086 0.774
> em_regulation ~
> edscore (b2) -0.119 0.023 -5.183 0.000 -0.040 -0.357
>
> Covariances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perfectionism ~~
> .em_regulation 1.102 0.539 2.042 0.041 0.183 0.183
>
> Intercepts:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 (.27.) 38.992 1.907 20.452 0.000 38.992 9.635
> .perf2 (.28.) 39.147 1.940 20.174 0.000 39.147 9.542
> .perf3 (.29.) 38.826 2.029 19.137 0.000 38.826 9.126
> .perf4 (.30.) 38.994 1.818 21.444 0.000 38.994 9.451
> .perf5 (.31.) 38.944 1.980 19.672 0.000 38.944 9.190
> .emreg1 (.32.) 44.652 0.931 47.950 0.000 44.652 11.650
> .emreg2 (.33.) 44.591 0.945 47.175 0.000 44.591 12.231
> .emreg3 (.34.) 44.605 0.914 48.811 0.000 44.605 12.504
> .emreg4 (.35.) 44.596 0.914 48.766 0.000 44.596 11.716
> .emreg5 (.36.) 44.588 0.915 48.710 0.000 44.588 12.235
> .prfctns -4.736 1.990 -2.380 0.017 -1.401 -1.401
> .em_rglt -1.859 0.549 -3.388 0.001 -0.619 -0.619
>
> Variances:
> Estimate Std.Err z-value P(>|z|) Std.lv Std.all
> .perf1 4.954 0.612 8.090 0.000 4.954 0.302
> .perf2 4.960 0.609 8.150 0.000 4.960 0.295
> .perf3 5.070 0.759 6.678 0.000 5.070 0.280
> .perf4 6.571 0.974 6.745 0.000 6.571 0.386
> .perf5 5.411 0.799 6.774 0.000 5.411 0.301
> .emreg1 5.659 0.820 6.897 0.000 5.659 0.385
> .emreg2 3.948 0.505 7.826 0.000 3.948 0.297
> .emreg3 3.538 0.551 6.418 0.000 3.538 0.278
> .emreg4 5.344 0.763 7.002 0.000 5.344 0.369
> .emreg5 3.851 0.644 5.976 0.000 3.851 0.290
> .perfectionism 4.575 0.642 7.130 0.000 0.401 0.401
> .em_regulation 7.877 1.122 7.020 0.000 0.872 0.872
anova(fit_em_cons, fit_model_group3)| Df | AIC | BIC | Chisq | Chisq diff | Df diff | Pr(>Chisq) | |
|---|---|---|---|---|---|---|---|
| fit_model_group3 | 100 | 14624 | 14810 | 91 | |||
| fit_em_cons | 101 | 14732 | 14914 | 201 | 110 | 1 | 0 |
# sig diff, em variant by gender
em_cons <- fitMeasures(fit_em_cons)[names = c("cfi", "tli")]
round(m3 - em_cons, 3)> cfi tli
> 0.045 0.053
# Create plot data
sem_parameters <-model_parameters(fit_model_group3, standardize = TRUE)
data_plot <- see::data_plot(sem_parameters, ci=FALSE)
# Rename nodes and edges
data_plot$nodes <- mutate(data_plot$nodes,
Name = str_replace(Name, "perfectionism", "Perfectionism"),
Name = str_replace(Name, "em_regulation", "Emotional\nRegulation"),
Name = str_replace(Name, "edscore", "ED\nSymptom\nScore"))
data_plot$edges <- mutate(data_plot$edges,
from = str_replace(from, "perfectionism", "Perfectionism"),
from = str_replace(from, "em_regulation", "Emotional\nRegulation"),
from = str_replace(from, "edscore", "ED\nSymptom\nScore"))
data_plot$edges <- mutate(data_plot$edges,
to = str_replace(to, "perfectionism", "Perfectionism"),
to = str_replace(to, "em_regulation", "Emotional\nRegulation"),
to = str_replace(to, "edscore", "ED\nSymptom\nScore"))
# Separate plot data into male and female
## Male
data_plot_male <- data_plot |>
map(~slice(., 1:13))
## Female
data_plot_female <- data_plot |>
map(~slice(., c(1:3, 14:n())))
data_plot_female$edges <- data_plot_female$edges |>
slice(4:n())
set.seed(333)
# Plot for Male
sem_plot_male <- tidygraph::tbl_graph(data_plot_male$nodes, data_plot_male$edges) |>
ggraph::ggraph(layout = 'fr') +
# Correlation
ggraph::geom_edge_arc(aes(
alpha = as.numeric(Component == "Correlation"),
label = Label_Correlation,
color = Coefficient),
strength = 0.3,
label_dodge = unit(4, "mm"),
angle_calc = "along",
edge_width = 0.5,
label_size = 2.7,
linetype = 2,
arrow = arrow(type = "closed", length = unit(3, "mm"), ends = "both"),
start_cap = ggraph::circle(-12, 'mm'), end_cap = ggraph::circle(-12, 'mm')) +
# Loading
ggraph::geom_edge_link(aes(
alpha = as.numeric(Component == "Loading"),
label = Label_Loading,
color = Coefficient),
label_dodge = unit(2, "mm"),
angle_calc = "along",
edge_width = 0.3,
label_size = 2.7,
#check_overlap = TRUE,
arrow = arrow(type = "closed", length = unit(3, "mm")),
start_cap = ggraph::circle(0, 'mm'), end_cap = ggraph::circle(-12, 'mm')) +
# Regression
ggraph::geom_edge_link(aes(
alpha = as.numeric(Component == "Regression"),
label = Label_Regression,
color = Coefficient),
label_dodge = unit(2, "mm"),
angle_calc = "along",
edge_width = 0.9,
label_size = 2.7,
#check_overlap = TRUE,
arrow = arrow(type = "closed", length = unit(3, "mm")),
start_cap = ggraph::circle(0, 'mm'), end_cap = ggraph::circle(-12, 'mm')) +
ggraph::geom_node_point(aes(colour = Name, size = Latent)) +
ggraph::geom_node_text(aes(label = Name), size = 3) +
ggraph::scale_edge_colour_gradient2(
guide = FALSE,
high = "#6aa84f",
mid = "#bcbcbc",
low = "#f50a0a"
) +
scale_alpha(guide = FALSE, range = c(0, 1)) +
scale_size_manual(values=c("TRUE"=22, "FALSE"=30)) +
scale_x_continuous(expand = expansion(c(0.07, 0.07))) +
scale_y_continuous(expand = expansion(c(0.07, 0.07))) +
scale_color_manual(values=c(
"Perfectionism"="#f383a9",
"perf1"="#f895b7",
"perf2"="#f396b5",
"perf3"="#f58caf",
"perf4"="#f8adc5",
"perf5"="#F8BBD0",
"Emotional\nRegulation"="#FF9800",
"emreg1"="#f3b14f",
"emreg2"="#fcd397",
"emreg3"="#f7bf6d",
"emreg4"="#FFCC80",
"emreg5"="#FFE0B2",
"ED\nSymptom\nScore"="#a88ade")) +
ggraph::theme_graph() +
theme(legend.position = "none") +
ggtitle("Final model for Male")
sem_plot_male#ggsave("figures/sem_plot_male.png", sem_plot_male, height=figheight*1.2, width=figwidth, dpi=600)# Plot for Female
sem_plot_female <- tidygraph::tbl_graph(data_plot_female$nodes, data_plot_female$edges) |>
ggraph::ggraph(layout = 'fr') +
# Correlation
ggraph::geom_edge_arc(aes(
alpha = as.numeric(Component == "Correlation"),
label = Label_Correlation,
color = Coefficient),
strength = 0.3,
label_dodge = unit(4, "mm"),
angle_calc = "along",
edge_width = 0.5,
label_size = 2.7,
linetype = 2,
arrow = arrow(type = "closed", length = unit(3, "mm"), ends = "both"),
start_cap = ggraph::circle(-12, 'mm'), end_cap = ggraph::circle(-12, 'mm')) +
# Loading
ggraph::geom_edge_link(aes(
alpha = as.numeric(Component == "Loading"),
label = Label_Loading,
color = Coefficient),
label_dodge = unit(2, "mm"),
angle_calc = "along",
edge_width = 0.3,
label_size = 2.7,
#check_overlap = TRUE,
arrow = arrow(type = "closed", length = unit(3, "mm")),
start_cap = ggraph::circle(0, 'mm'), end_cap = ggraph::circle(-12, 'mm')) +
# Regression
ggraph::geom_edge_link(aes(
alpha = as.numeric(Component == "Regression"),
label = Label_Regression,
color = Coefficient),
label_dodge = unit(2, "mm"),
angle_calc = "along",
edge_width = 0.9,
label_size = 2.7,
#check_overlap = TRUE,
arrow = arrow(type = "closed", length = unit(3, "mm")),
start_cap = ggraph::circle(0, 'mm'), end_cap = ggraph::circle(-12, 'mm')) +
ggraph::geom_node_point(aes(colour = Name, size = Latent)) +
ggraph::geom_node_text(aes(label = Name), size = 3) +
ggraph::scale_edge_colour_gradient2(
guide = FALSE,
high = "#6aa84f",
mid = "#bcbcbc",
low = "#f50a0a"
) +
scale_alpha(guide = FALSE, range = c(0, 1)) +
scale_size_manual(values=c("TRUE"=22, "FALSE"=30)) +
scale_x_continuous(expand = expansion(c(0.07, 0.07))) +
scale_y_continuous(expand = expansion(c(0.07, 0.07))) +
scale_color_manual(values=c(
"Perfectionism"="#f383a9",
"perf1"="#f895b7",
"perf2"="#f396b5",
"perf3"="#f58caf",
"perf4"="#f8adc5",
"perf5"="#F8BBD0",
"Emotional\nRegulation"="#FF9800",
"emreg1"="#f3b14f",
"emreg2"="#fcd397",
"emreg3"="#f7bf6d",
"emreg4"="#FFCC80",
"emreg5"="#FFE0B2",
"ED\nSymptom\nScore"="#a88ade")) +
ggraph::theme_graph() +
theme(legend.position = "none") +
ggtitle("Final Model for Female")
sem_plot_female#ggsave("figures/sem_plot_female.png", sem_plot_female, height=figheight*1.2, width=figwidth, dpi=600)